home *** CD-ROM | disk | FTP | other *** search
- /*
- File: DynamicArray.h
-
- Contains: A handle-based dynamic array class
-
- Written by: Dave Falkenburg
-
- Copyright: © 1994-95 by Dave Falkenburg, all rights reserved.
-
- Change History (most recent first):
-
- <1> 1/3/95 DRF First checked in.
- */
-
- #ifndef _DYNAMICARRAY_
- #define _DYNAMICARRAY_
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
-
- typedef void ArrayElement, *ArrayElementPtr;
- typedef unsigned long ArrayElementCount;
- typedef unsigned long ArrayElementIndex;
-
- //--------------------------------------------------------------------------------
- class TDynamicArray
- {
- public:
- TDynamicArray();
- virtual ~TDynamicArray();
-
- // insertion & deletion
-
- OSErr Insert(ArrayElementPtr elementToInsert, ArrayElementIndex beforeElement);
- OSErr InsertFirst(ArrayElementPtr elementToInsert);
- OSErr InsertLast(ArrayElementPtr elementToInsert);
-
- void Delete(ArrayElementIndex whichElement);
- void DeleteFirst();
- void DeleteLast();
-
- // element accessors
-
- ArrayElementCount GetElementCount() { return fElementCount; };
-
- ArrayElementPtr GetElementPtr(ArrayElementIndex whichElement);
- void SetElementPtr(ArrayElementIndex whichElement, ArrayElementPtr element);
-
- // iterators
-
- typedef void (*EachArrayElementProc)(ArrayElementPtr element, void * param);
- typedef Boolean (*EachArrayElementTestProc)(ArrayElementPtr element, void * param);
-
- void ForEachElement(EachArrayElementProc proc, void * param);
- ArrayElementPtr FirstElementThat(EachArrayElementTestProc proc, void * param);
- ArrayElementPtr LastElementThat(EachArrayElementTestProc proc, void * param);
-
- protected:
- ArrayElementCount fElementCount;
- ArrayElementPtr ** fStorage;
- };
-
- template <class AType> class TDynamicArrayOf : public TDynamicArray
- {
- inline AType* GetElement(ArrayElementIndex whichElement) { return (AType*) GetElementPtr(whichElement); }
- inline void SetElement(ArrayElementIndex whichElement, ArrayElementPtr element) { SetElementPtr(whichElement, (ArrayElementPtr) element); }
- };
-
- #endif // _DYNAMICARRAY_
-